﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DAL;
using DAL.Models;
using BAL;
using BibliotecaVirtual.Models;
using System.Web.Security;
using BAL.Interfaces;

namespace BibliotecaVirtual.Controllers
{ 
    public class PrestamosController : Controller
    {
        private IPrestamosService BALPrestamo = null;
        private ISociosService BALSocio = null;
        private IEjemplarsService BALEjemplar = null;
        private IEstadoPrestamosService BALEstadoPrestamo = null;
        private IUsuarioSocioService BALUsuarioSocio = null;

        public PrestamosController(IPrestamosService PrestamosService,
                                   ISociosService SociosService,
                                   IEjemplarsService EjemplarsService,
                                   IEstadoPrestamosService EstadoPrestamosService,
                                   IUsuarioSocioService UsuarioSocioService)
        {
            BALPrestamo = PrestamosService;
            BALSocio = SociosService;
            BALEjemplar = EjemplarsService;
            BALEstadoPrestamo = EstadoPrestamosService;
            BALUsuarioSocio = UsuarioSocioService;
        }

        //
        // GET: /Prestamos/
        [Authorize(Roles = Libreria.Constantes.SOCIO)]
        public ViewResult Index()
        {
            Socios s = BALUsuarioSocio.GetSocioByGuid((Guid)Membership.GetUser().ProviderUserKey);
            var prestamos = BALPrestamo.GetBySocioID(s.id);

            if (System.Web.Security.Roles.GetRolesForUser().Contains(Libreria.Constantes.ADMINISTRADOR))
            {
                prestamos = BALPrestamo.GetAllValidados();
            }
            return View(prestamos.ToList());
        }

        //
        // GET: /Prestamos/Details/5
        [Authorize(Roles = Libreria.Constantes.SOCIO)]
        public ViewResult Details(long id)
        {
            object[] keys = new object[1] { id };
            Prestamos item = BALPrestamo.Find(keys);
            return View(item);
        }

        //
        // GET: /Prestamos/Create
        [Authorize(Roles = Libreria.Constantes.ADMINISTRADOR)]
        public ActionResult Create()
        {
            cargarDatos(null);
            return View();
        }

        public ActionResult Principal(Prestamos prestamo)
        {
            return View(prestamo);
        }

        //
        // POST: /Prestamos/Create

        [HttpPost]
        [Authorize(Roles = Libreria.Constantes.ADMINISTRADOR)]
        public ActionResult Create(Prestamos item)
        {
            if (ModelState.IsValid)
            {
                BALPrestamo.Create(item);
                return RedirectToAction("Index");  
            }
            cargarDatos(item);
            return View(item);
        }
        
        //
        // GET: /Prestamos/Edit/5
        [Authorize(Roles = Libreria.Constantes.ADMINISTRADOR)]
        public ActionResult Edit(long id)
        {
            object[] keys = { id };
            Prestamos item = BALPrestamo.Find(keys);
            cargarDatos(item);
            return View(item);
        }

        //
        // POST: /Prestamos/Edit/5

        [HttpPost]
        [Authorize(Roles = Libreria.Constantes.ADMINISTRADOR)]
        public ActionResult Edit(Prestamos item)
        {
            if (ModelState.IsValid)
            {
                BALPrestamo.Edit(item);
                return RedirectToAction("Index");
            }
            cargarDatos(item);
            return View(item);
        }

        //
        // GET: /Prestamos/Delete/5
        [Authorize(Roles = Libreria.Constantes.ADMINISTRADOR)]
        public ActionResult Delete(long id)
        {
            object[] keys = new object[1] { id };
            Prestamos item = BALPrestamo.Find(keys);
            return View(item);
        }

        //
        // POST: /Prestamos/Delete/5
        [Authorize(Roles = Libreria.Constantes.ADMINISTRADOR)]
        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(long id)
        {
            object[] keys = new object[1] { id };
            Prestamos item = BALPrestamo.Find(keys);
            BALPrestamo.Remove(item);
            return RedirectToAction("Index");
        }

        //protected override void Dispose(bool disposing)
        //{
        //    BALPrestamo.Dispose();
        //    base.Dispose(disposing);
        //}

        protected void cargarDatos(Prestamos prestamos)
        {
            if (prestamos != null)
            {
                ViewBag.SocioId = new SelectList(BALSocio.GetAll(), "id", "Nombre", prestamos.SocioId);
                ViewBag.EjemplarId = new SelectList(BALEjemplar.GetAll(), "id", "Codigo", prestamos.EjemplarId);
                ViewBag.EstadoPrestamoId = new SelectList(BALEstadoPrestamo.GetAll(), "id", "Descripcion", prestamos.EstadoPrestamoId);
            }
            else
            {
                ViewBag.SocioId = new SelectList(BALSocio.GetAll(), "id", "Nombre");
                ViewBag.EjemplarId = new SelectList(BALEjemplar.GetAll(), "id", "Codigo");
                ViewBag.EstadoPrestamoId = new SelectList(BALEstadoPrestamo.GetAll(), "id", "Descripcion");
            }
        }
    }
}